package com.shujia.day12;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Code06ChangeFun {
    public static void main(String[] args) {
            /*
                可变长参数：
                    对于参数传递时，如果给定任意多个值，那么可以使用可变长参数
                    格式：
                        函数名(类型... 参数名)
                    原理：
                        将可变长参数的对象类进行打印，可以看到其类型为一个数组

             */


        System.out.println(sum(2, 3));
        System.out.println(sum(4, 5, 6));

        ArrayList<Integer> integers = new ArrayList<>();
        integers.add(2);
        integers.add(3);
        integers.add(4);
        integers.add(5);
        System.out.println(sum(integers));

        System.out.println("==============");
        System.out.println(sum(1, 2, 3, 4));

        System.out.println(compute("+", 6, 7, 8));

        // Arrays工具类中对于可变长参数的使用
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

    }

    public static int sum(int a, int b) {
        return a + b;
    }

    public static int sum(int a, int b, int c) {
        return a + b + c;
    }

    // 随意传入一系列参数 计算其累加和 如何处理

    // 对于ArrayList如果作为参数类型，那么可以添加一个泛型限定其数据类型
    public static int sum(ArrayList<Integer> arrayList) {

        int sum = 0;
        for (Integer integer : arrayList) {
            sum += integer;
        }
        return sum;
    }

    public static int sum(int... ints) {

//        System.out.println(ints.getClass().getName());
        // 对数组中的数据进行获取

        int sum = 0;
        for (int anInt : ints) {
            sum += anInt;
        }
        return sum;
    }


    // 当有多个参数时，可变长参数需要放在参数列表的最后
    public static int compute(String flag, int... ints) {

        int res = 0;
        if (flag.equals("+")){
            for (int anInt : ints) {
                res+= anInt;
            }
            return res;
        }else {
            return res;
        }
    }


}


